package com.t.bricks.bussiness.controller.visitlog;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.t.bricks.bussiness.controller.common.BaseController;
import com.t.bricks.bussiness.db.entity.visitlog.VisitLog;
import com.t.bricks.bussiness.service.common.CommonService;
import com.t.bricks.model.MsgEmity;
import com.t.bricks.utils.modules.web.FindByPageParam;

/**
 * 来访记录控制层
 * 继承BaseController可直接实现通用方法
 * @author HuangXinBian
 * @DateTime 2021年05月15日 18:39:05
 */
@RestController
@Api(value="来访记录", tags={"通用业务-来访记录操作接口"})
@RequestMapping("/visit/log/")
public class VisitLogController extends BaseController<CommonService, VisitLog, Map<String, Object>> {

	/**
	 * 控制操作,首位9不参与用6个数代表开关,0为不限制,1为限制
	 * 6个数的控制分别是:删除、修改、查询、导出、统计、步骤值可逆
	 * 其中前5个为'是否仅创建者可操作'后续为其它控制开关
	 */
	protected int enableTag = 9111110;

	/**
	 * 设置 检查待新增内容是否存在重复数据(多字段组合重复即重复)集合
	 * @return 返回的集合将覆盖父类的checkRepeatCombination成员,若返回null则不进行重复校验
	 */
	@Override
	protected List<String> setCheckRepeatCombination() {
		return Arrays.asList("sIdentNumber", "dTimeSt");
	}

	/**
	 * 设置 检查待新增内容是否存在重复数据(单独字段重复即重复)集合
	 * @return 返回的集合将覆盖父类的checkRepeatAlone成员,若返回null则不进行重复校验
	 */
	@Override
	protected Map<String, Integer> setCheckRepeatAlone() {
		return null;
	}
	
	/**
	 * 删除数据
	 * @param iVersion
	 * @param id 记录编号
	 * @return MsgEmity
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/del")
	@Override
	public MsgEmity del(Integer iVersion, String id) {
		return super.del(iVersion, id);//直接使用父类中定义的方法,否则使用visitLogService.del(iVersion, id);
	}

	/**
	 * 新增数据
	 * @param visitLog 来访记录实体对象
	 * @return MsgEmity
	 */
	@ApiOperation(value="新增数据", response=VisitLog.class)
	@RequestMapping(method={RequestMethod.POST}, value="/add")
	@Override
	public MsgEmity add(@RequestBody VisitLog visitLog) {
		return super.add(visitLog);//直接使用父类中定义的方法,否则使用visitLogService.add(visitLog);
	}

	/**
	 * 修改数据
	 * @param visitLog 来访记录实体对象
	 * @return MsgEmity
	 */
	@ApiOperation(value="修改数据", response=VisitLog.class)
	@RequestMapping(method={RequestMethod.POST}, value="/edit")
	@Override
	public MsgEmity edit(@RequestBody VisitLog visitLog) {
		return super.edit(visitLog);//直接使用父类中定义的方法,否则使用visitLogService.edit(visitLog);
	}

	/**
	 * 根据记录编号取对象
	 * @param id 记录编号
	 * @return MsgEmity
	 */
	@ApiOperation(value="根据记录编号取对象", response=VisitLog.class)
	@RequestMapping(method={RequestMethod.POST}, value="/find/id")
	@Override
	public MsgEmity findById(String id) {
		return super.findById(id);//直接使用父类中定义的方法,否则使用visitLogService.findById(id);
	}

	/**
	 * 根据关键值取对象集合
	 * @param visitLog 来访记录实体对象
	 * @return MsgEmity
	 */
	@ApiOperation(value="根据关键值取对象集合", response=VisitLog.class)
	@RequestMapping(method={RequestMethod.POST}, value="/find/key")
	@Override
	public MsgEmity findByKey(@RequestBody VisitLog visitLog) {
		return super.findByKey(visitLog);//直接使用父类中定义的方法,否则使用visitLogService.findByKey(visitLog);
	}

	/**
	 * 根据记录编号查询符合分页数据的某条记录
	 * @param id 记录编号
	 * @return MsgEmity
	 */
	@ApiOperation(value="根据记录编号查询符合分页数据的某条记录", response=VisitLog.class)
	@RequestMapping(method={RequestMethod.POST}, value="/find/page/row")
	@Override
	public MsgEmity findByPageRow(String id) {
		return super.findByPageRow(id);//直接使用父类中定义的方法,否则使用visitLogService.findByPageRow(id);
	}

	/**
	 * 查询分页数据
	 * @param findByPageParam 分页查询条件组合类
	 * 结构参考: {"page": 分页请求信息对象, "orders": 排序信息对象集合, "sLikeStr": 全文检索, "condition": 查询条件对象}
	 * @return MsgEmity 返回查询结果
	 */
	@ApiOperation(value="查询分页数据", response=VisitLog.class)
	@RequestMapping(method={RequestMethod.POST}, value="/find/page")
	@Override
	public MsgEmity findByPage(@RequestBody FindByPageParam<Map<String, Object>> findByPageParam) {//findByPage(@RequestBody FindByPageParam<ConditionVisitLog> findByPageParam)
		return super.findByPage(findByPageParam);//直接使用父类中定义的方法,否则使用 visitLogService.findByPage(findByPageParam.getPage(), findByPageParam.getOrders(), findByPageParam.getsLikeStr(), findByPageParam.getCondition());
	}
	
	/**
	 * 创建Excel文件
	 * @param findByPageParam 分页查询条件组合类,注意:分页信息将被抛弃
	 * 结构参考:  {"page": 分页请求信息对象(被抛弃), "orders": 排序信息对象集合, "sLikeStr": 全文检索, "condition": 查询条件对象}
	 * @return MsgEmity 返回结构中data为创建的经过压缩的Excel内容,接收端需要进行解压,msg为文件名
	 */
	@Override
	@RequestMapping(method={RequestMethod.POST}, value="/export")
	public ResponseEntity<byte[]> export(@RequestBody FindByPageParam<Map<String, Object>> findByPageParam) {//export(@RequestBody FindByPageParam<ConditionVisitLog> findByPageParam)
		return super.export(findByPageParam);//直接使用父类中定义的方法,否则使用原始方式
	}

	/**
	 * 修改状态
	 * @param id 编号
	 * @param iState 状态值
	 * @param iVersion 记录版本号
	 * @param sMemo 备注
	 * @return MsgEmity 返回执行情况
	 */
	@RequestMapping(method={RequestMethod.POST}, value="/change/state")
	@Override
	public MsgEmity changeState(@RequestParam("id") String id,
			@RequestParam("iState") Integer iState,
			@RequestParam("iVersion") Integer iVersion,
			String sMemo) {//changeState(String id, Integer iState, Integer iVersion, String sMemo)
		return super.changeState(id, iState, iVersion, sMemo);//直接使用父类中定义的方法,否则使用原始方式visitLogService.changeState(id, iState, iVersion, sMemo);
	}

	//---------------------------- 自动生成代码结束 ----------------------------//
	
	/**
	 * 直接调用Mapping中方法参考
	 * 注意:1)本方法仅用于参考,不能开放,保留这段屏蔽的代码仅为了方便接口的扩展
	 *	 2)本方法的函数名必须与Mapping中的方法名一致
	 *	 3)本方法的参数必须与Mapping中的参数类型和顺序一致
	 * @param 参数
	 * @return MsgEmity 返回查询结果
	 */
	//@ApiOperation(value="接口名称", notes="接口描述", response=接口返回的MsgEmity中的Data类名.class)
	//@ApiResponses({
	//	@ApiResponse(code=200, message="{\"success\": 布尔值, \"msg\": 文字提示, \"data\": 码值|Json字符串}"),
	//	@ApiResponse(code=400, message="错误的请求,请检查路径"),
	//	@ApiResponse(code=404, message="请求路径没有或页面跳转路径不对"),
	//	@ApiResponse(code=1000001, message="内部请求密钥错误"),
	//	@ApiResponse(code=1000002, message="您还没有登录或登录已超时,需要重新登录"),
	//	@ApiResponse(code=1000003, message="检查登录状态失败,请稍后重试！"),
	//	@ApiResponse(code=1000004, message="请求的操作不存在,请检查访问地址正确性，如大小写"),
	//	@ApiResponse(code=1000005, message="响应后在系统内部发生不可预知的错误"),
	//	@ApiResponse(code=1019000, message="1019000~1999999为拦截器调用方法错误"),
	//	@ApiResponse(code=7001, message="码值代表的信息"),
	//	@ApiResponse(code=7002, message="码值代表的信息"),
	//	@ApiResponse(code=7003, message="码值代表的信息"),
	//	@ApiResponse(code=7004, message="码值代表的信息")
	//})
	//@RequestMapping(method={RequestMethod.POST}, value="/callMapping")
	//public MsgEmity 与mapping中的方法名一致(Integer i, String s, @RequestBody Object o...) {
	//	return visitLogService.callMapping(i, s, o...);//controller中的参数有多少个,这里的参数就有多少个
	//}

}
